﻿// @include "Browser.js"
// @include "Type.js"
// @include "Array.js"
// @include "../extend/Debug.js"
/**
 * @fileOverview 基础对象类
 * 
 * @version qinglan_Object 1.0
 * @static
 * @author wxq wxqqh@qq.com
 */
/**
 * 命名空间
 * 
 * @namespace
 * @type Object
 */
window.qinglan = window.qinglan || {};
/**
 * 基础工具类
 * 
 * @namespace
 * @type Object
 */
qinglan.Object = qinglan.Object || {};
/**
 * 将对象转换为json字串
 * 
 * @param {Object}
 *            obj 对象
 * @return {String} 转换后的字符串
 */
qinglan.Object.toJsonString = function(obj) {
	if (qinglan.Type.isString(obj)) {
		qinglan.Debug.info('The typeof obj : [' + obj + '] is String');
		return obj.toString();
	}
	if (qinglan.Type.isUndefined(obj)) {
		return 'undefined';
	}
	if (qinglan.Type.isNull(obj)) {
		return 'null';
	}
	if (qinglan.Type.isObject(obj)) {
		var result = [];
		if (qinglan.Type.isArray(obj)) {
			for (var i = 0; i < obj.length; i++)
				result.push(qinglan.Object.toJsonString(obj[i]));
			result = "[" + result.join() + "]";
		} else {
			for (var i in obj)
				result.push("\"" + i + "\":"
						+ qinglan.Object.toJsonString(obj[i]));
			result = "{" + result.join() + "}";
		}
		return result;
	} else {
		return obj.toString();
	}
};
/**
 * Each 方法
 * 
 * @param {Object} obj 需要被遍历的对象
 * @param {Function} fun 遍历的时候执行的方法
 * @param {Object} context 执行上下文
 * 
 * @function
 * @public
 */
qinglan.Object.each = function(obj,fun,context){
	if(qinglan.Type.isArray(obj)){
		qinglan.Array.each(obj,fun,context);
	}else{
		for (var index in obj){
			if(fun.call(context,obj[index],index,obj) === false){return ;};
		}
	}
};
